package com.example.demo02aop.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.StringJoiner;

@Component
@Aspect
public class LogAspect {

    // 功能增加的方法
    //execution(* 返回值的任意类型
    //execution(* com.example.demo02aop.service..   业务包名及子包
    //execution(* com.example.demo02aop.service..*  业务包名及子包下的所有类
    //execution(* com.example.demo02aop.service..*.* 业务包名及子包下的所有类的所有方法
    //execution(* com.example.demo02aop.service..*.*(..))   所有参数

    @Before("execution(* com.example.demo02aop.service..*.*(..))")
    public void sysLog(JoinPoint jp) {
        StringJoiner log = new StringJoiner("|","{","}");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        log.add(formatter.format(LocalDateTime.now()));

        // 当前执行的业务方法名称
        String methodName = jp.getSignature().getName();
        log.add(methodName);

        // 方法的参数
        Object[] args = jp.getArgs();
        for (Object arg : args) {
            log.add(arg == null ? "-" : arg.toString());
        }

        System.out.println("日记：" + log);
    }
}
